package org.erikaredmark.monkeyshines.editor.dialog;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import org.erikaredmark.monkeyshines.AnimationSpeed;
import org.erikaredmark.monkeyshines.AnimationType;
import org.erikaredmark.monkeyshines.GameConstants;
import org.erikaredmark.monkeyshines.Sprite;
import org.erikaredmark.monkeyshines.Sprite.SpriteType;
import org.erikaredmark.monkeyshines.resource.WorldResource;
/**
*
* Simply displays a sprite animating continously and not moving. Designed for the level editor.
* <p/>
* The class is created with a valid graphics resource. The sprite in question can be changed by setting the id of this
* canvas.
*
* @author Erika Redmark
*
*/
public class SpriteAnimationCanvas extends Canvas {
private static final long serialVersionUID = 1L;
private Sprite animatingSprite;
private final WorldResource rsrc;
Graphics bufferGraphics;
public SpriteAnimationCanvas(final int spriteId, final AnimationType animationType, final AnimationSpeed speed, final WorldResource rsrc) {
this.rsrc = rsrc;
// Type is irrelevant for the canvas: no concept of collisions
this.animatingSprite = Sprite.newUnmovingSprite(spriteId, animationType, speed, SpriteType.NORMAL, rsrc);
this.animatingSprite.setVisible(true);
// Make sprite animate
Timer animationTimer = new Timer(GameConstants.GAME_SPEED, new ActionListener() {
@Override public void actionPerformed(ActionEvent arg0) {
animatingSprite.update();
SpriteAnimationCanvas.this.repaint();
}
});
this.setPreferredSize(new Dimension(40, 40) );
animationTimer.start();
}
public void setSpriteId(int id) {
this.animatingSprite = Sprite.newUnmovingSprite(id, this.animatingSprite.getAnimationType(), this.animatingSprite.getAnimationSpeed(), SpriteType.NORMAL, rsrc);
this.animatingSprite.setVisible(true);
this.repaint();
}
public void setAnimationType(AnimationType type) {
this.animatingSprite = Sprite.newUnmovingSprite(this.animatingSprite.getId(), type, this.animatingSprite.getAnimationSpeed(), SpriteType.NORMAL, rsrc);
this.animatingSprite.setVisible(true);
}
public void setAnimationSpeed(AnimationSpeed speed) {
this.animatingSprite = Sprite.newUnmovingSprite(this.animatingSprite.getId(), this.animatingSprite.getAnimationType(), speed, SpriteType.NORMAL, rsrc);
this.animatingSprite.setVisible(true);
}
@Override public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
animatingSprite.paint(g2d);
}
}